/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.rcs.folders;

import java.io.IOException;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author pablo
 */
public interface VirtualItem {
    
  /**
   * Para obtener el nombre del item interno
   * @return Nombre interno del item
   */
  public String getName() ;
  
  /**
   * Nombre que se mostrará del item
   * @return * Nombre que se mostrará del item
   */
  public String getDisplayName() ;

  /**
   * Fecha de la última modificación
   * @return fecha de la última modificación del item
   */
  public Date getModifiedDate();
  
  /**
   * Cuando está previsto que expire el item para poder usar una caché
   * @return Cuando está previsto que expire el item
   */
  public Date getExpiresDate() ;
  
  /**
   * Identificador a usar para poder identificar los ficheros
   * @return 
   */
  public String getETag() ;
  
  /**
   * Longitud del item para ser mandado
   * @return
   */
  public long getContentLength() ;
  
  /**
   * El tipo de contenido puede ser nulo, con lo que se usará application/octet-stream.
   * @return 
   */
  public String getContentType();
  
  /**
   * 
   * @param response
   * @param request
   * @param requestedPath La ruta dentro del sistema de ficheros de item requerido
   * @param onlyHeader
   * @throws Exception 
   */
  public void sendContent(HttpServletResponse response, HttpServletRequest request, String requestedPath, boolean onlyHeader) throws Exception ;
}
